import router from './router/index'
// import NProgress from 'nprogress'
import 'nprogress/nprogress.css'
import pinia from './stores'
import { useUserInfoStore } from './stores/userInfo'


// 路由守卫逻辑

// NProgress.configure({ showSpinner: false });
const userInfo= useUserInfoStore(pinia)

// 路由白名单
const whiteList:any[] = [
  "/Home",'/Classify','/Buying','/login','/user',"/Search"
]

// 路由加载前
router.beforeEach(async (to, from, next) => {
    // 在显示进度条
    // NProgress.start()
  // 设置整个页面的标题
  // document.title = getPageTitle(to.meta.title as string)

 const token = userInfo.token || localStorage.getItem('vue_admin_template_token');
 
 // 如果token存在(已经登陆或前面登陆过)
 if (token) {
   // 如果请求的是登陆路由
   if (to.path === '/login') {
     // 直接跳转到根路由, 并完成进度条
     next({ path: '/' })
    //  NProgress.done()
   } else { // 请求的不是登陆路由
     // 是否已经登陆
     const hasLogin = !!userInfo.userInfo.name
     
     // 如果已经登陆直接放行
     if (hasLogin) {
       next()
     } else { // 如果还没有登陆
       try {
         // 异步请求获取用户信息(包含权限数据) ==> 动态注册用户的权限路由 => 当次跳转不可见
        
         await userInfo.getInfos()
         next(to) // 重新跳转去目标路由, 能看到动态添加的异步路由, 且不会丢失参数
        //  NProgress.done()

       } catch (error: any) { // 如果请求处理过程中出错
         // 重置用户信息
         await userInfo.reset()
         // 提示错误信息
         // ElMessage.error(error.message || 'Has Error') // axios拦截器中已经有提示了
         // 跳转到登陆页面, 并携带原本要跳转的路由路径, 用于登陆成功后跳转
         next(`/login?redirect=${to.path}`)
        //  NProgress.done()
       }
     }
   }
 } else { // 没有token
  
   // 如果目标路径在白名单中(是不需要token的路径)
   if (whiteList.indexOf(to.path) !== -1) {
     // 放行
     next()
   } else {
     // 如果没在白名单中, 跳转到登陆路由携带原目标路径
     next(`/login?redirect=${to.path}`)
     // 完成进度条  当次跳转中断了, 要进行一个新的跳转了
    //  NProgress.done()
   }
 }
})

// 路由加载后
router.afterEach(() => {
  // NProgress.done()
})
